package com.ionehe.group.common.notify.message.producer;


import org.apache.rocketmq.client.producer.SendResult;
import org.apache.rocketmq.common.message.Message;

/**
 * Copyright (c) 2021 ionehe.com
 * Date: 2021/4/21
 * Time: 1:22 下午
 *
 * @author 2021年 <a href="mailto:a@ionehe.com">秀</a>
 * 【生产者】
 */
public interface Producer<T> {
    /**
     * 启动
     */
    void start();

    /**
     * 关闭
     */
    void shutdown();

    /**
     * 发送
     *
     * @param model   model
     * @param tags    tag
     * @param keys    key
     * @param message 消息对象
     * @return 发送结果
     */
    SendResult send(String model, String tags, String keys, T message);

    /**
     * 单向发送
     *
     * @param model   model
     * @param tags    tag
     * @param keys    key
     * @param message 消息对象
     */
    void sendOneway(String model, String tags, String keys, T message);


    /**
     * 发送
     *
     * @param message 消息对象
     * @return 发送结果
     */
    SendResult send(Message message);

    /**
     * 单向发送
     *
     * @param message 消息对象
     */
    void sendOneway(Message message);

    /**
     * 是否启动
     *
     * @return 是否
     */
    boolean isStarted();

    /**
     * 是否关闭
     *
     * @return 是否
     */
    boolean isClosed();
}